Airbnbs in Berlin
Das erste Airbnb in Berlin öffnete 2009 im Stadtteil Pankow (siehe auch Übersichtskarte). Von da an war ein rascher Anstieg zu verzeichnen. Bereits 6 Jahre später gab es in Berlin-Pankow alleine 200 Airbnbs. Mittlerweile ist diese Zahl auf rund 1600 angestiegen.
Das teuerste heute verfügbare Airbnb kostet dabei 8983 pro Nacht; für die meisten Leute nicht gerade ein Schnäppchen. Dabei handelt es sich um ein Apartment im Stadtteil Friedrichshain-Kreuzberg.
Insgesammt wurden über die Jahre in Berlin 0 Gäste in Airbnbs empfangen.
Die Berliner Airbnbs scheinen allgemein in einem sehr guten Zustand zu sein. Zumindest lassen die hohen Gesamtratings darauf schliessen. Allerdings scheint es kaum einen Zusammenhang mit dem Preis zu geben, worüber sich Sparfüchse freuen dürften.
Auch beim Thema Sauberkeit gehen viele Hosts keine Kompromisse ein. Es scheint jedoch ein paar faule Eier zu geben. Immerhin, wer bereit ist über 0 Euro pro Nacht auszugeben scheint auf der sicheren Seite zu sein.
Verrückt; auch die Lageratings sind fast alle super. Entweder Berlin hat fast nur erstklassige Wohngebiete, viele der guten Wohnungen sind bei Airbnb vermietet, oder die Gäste sind sehr wohlwollend. Wir wissen es schlussendlich nicht (eine einfache Erklärung für die guten ratings könnte z.B. auch sein, dass gute Airbnbs einfach häufiger besucht werden).
---
title: "Dashboard Practical"
output:
flexdashboard::flex_dashboard:
vertical_layout: fill
theme: lumen
source_code: embed
social: ["twitter", "facebook"]
---
```{r setup, include=FALSE}
# Lade Pakete
library(flexdashboard)
library(tidyverse)
library(plotly)
library(leaflet)
library(viridis)
library(htmltools)
library(patchwork)
airbnb <- read_csv("1_Data/airbnb.csv")
```
Übersicht der Airbnbs in Berlin {data-orientation=rows}
======================================================================
Zeile {data-height = 400}
----------------------------------------------------------------------
### Superhosts
```{r}
# berechne die Anzahl Superhosts im airbnb Datensatz
n_superhosts <- sum(airbnb$Host_superhost)
# Erstelle valueBox
# Setze die oben berechnete Summe ein
valueBox(n_superhosts,
# Definiere "Superhost" als Titel. Der HTML code
# vergrössert die Schrift und setzt die Schriftfarbe
# auf weiss
caption = "Superhost
",
# Wähle eine Medallie als Icon
icon = "fa-medal",
# Definiere die Färbung der valueBox (hier das Airbnb grün)
color = "#008489")
```
### Allstar
```{r}
# Berechne die Anzahl allstars, mit ausschliesslich top ratings
allstar <- airbnb %>%
# Rating_gesamt ist von 0 bis 100 -> reskaliere auf 0 bis 10
mutate(Rating_gesamt = Rating_gesamt / 10) %>%
# Behalte ausschliessliche Spalten mit Ratings
select(starts_with("Rating")) %>%
# Berechne die Mittelwerte jeder Zeile über alle Spalten
mutate(Ratings_m = rowMeans(.)) %>%
# Behalte nur die Zeilen mit Mittelwert 10 (Maximum Rating)
filter(Ratings_m == 10) %>%
# Zähle die Anzahl verbliebener Zeilen
summarise(n())
valueBox(allstar, caption = "Allstar
",
icon = "fa-gem", color = "#f5d142")
```
### Preiswert
```{r}
# Berechne die Anzahl preiswerter Airbnbs
preiswert <- sum(airbnb$Preis < 100)
valueBox(preiswert,
caption = "Preiswert
",
icon = "fa-money-bill-wave", color = "#85a95d")
```
Zeile
----------------------------------------------------------------------
```{r fig.width=14.75, fig.height=5.65}
# Erstelle neue Variable für die Labels
airbnb %>%
# Erstelle Plot
leaflet() %>%
# Setze Anfangskoordinaten und Zoomwert
setView(lng = 13.40439, lat = 52.51128, zoom = 12) %>%
# Zeichne Karte
addTiles() %>%
# Füge Marker hinzu
addCircleMarkers(
lng = ~Längengrad,
lat = ~Breitengrad,
radius = 4,
stroke = FALSE, fillOpacity = 0.5
)
```
Entwicklung über Zeit {data-orientation=columns}
======================================================================
Spalte {data-width = 800}
----------------------------------------------------------------------
### Entwicklung der Berliner Airbnbs seit 2009
```{r fig.width=12, fig.height=7}
### Plot zum Verlauf über die Zeit
# Anzahl Stadtteile
n_stadtteile <- length(unique(airbnb$Stadtteil))
# Definiere n_stadtteile verschiedene Farben aus der viridis palette
farben <- viridis(n_stadtteile)
# Passe den Datensatz an
Verlauf <- airbnb %>%
# Gruppiere über Stadtteile
group_by(Stadtteil) %>%
# Ordne Zeilen Aufsteigend nach Erstellungsdatum
arrange(Erstellungsdatum) %>%
# Erstelle neue Variablen Datum und Kumulativ,
# letztere als 10er Logarithmus der Anzahl Airbnbs
mutate(Datum = Erstellungsdatum,
Kumulativ = log10(1:n())) %>%
# Erstelle den Plot mit Datum auf der x- und Kumulativ auf der y-Achse
# Separate und eingefärbte Linien pro Stadtteil
ggplot(aes(x = Datum, y = Kumulativ, col = Stadtteil)) +
# Zeichne Punkte ein
geom_point() +
# Zeichne Linien
geom_line(show.legend = FALSE) +
# Definiere Farbwerte
scale_color_manual(values = farben) +
# Definiere y-Achsenbeschriftung; verwendet HTML wegen plotly
ylab("log10(Kumulative Häufigkeit)") +
# Definiere Plot design
theme_light()
# Rufe ggplotly auf, um die Plotly Version zu erstellen
ggplotly(Verlauf)
```
Spalte {data-width = 200}
----------------------------------------------------------------------
### Hintergründe
**Airbnbs in Berlin**
Das erste Airbnb in Berlin öffnete 2009 im Stadtteil [Pankow](https://de.wikipedia.org/wiki/Berlin-Pankow) (siehe auch [Übersichtskarte](#page-1)). Von da an war ein rascher Anstieg zu verzeichnen. Bereits 6 Jahre später gab es in Berlin-Pankow alleine `r round(10**2.3)` Airbnbs. Mittlerweile ist diese Zahl auf rund `r round(10**3.2 / 100) * 100` angestiegen.
Das teuerste heute verfügbare Airbnb kostet dabei `r max(airbnb$Preis)` pro Nacht; für die meisten Leute nicht gerade ein Schnäppchen. Dabei handelt es sich um ein `r airbnb$Unterkunftsart[max(airbnb$Preis)]` im Stadtteil `r airbnb$Stadtteil[max(airbnb$Preis)]`.
Insgesammt wurden über die Jahre in Berlin `r as.integer(sum(airbnb$host_anzahl))` Gäste in Airbnbs empfangen.
Bewertungen der Airbnbs {.storyboard}
======================================================================
### Gesamtrating {data-commentary-width=300}
```{r}
## Erstelle das Histogramm der Gesamtratings
# Wähle die Rating_gesamt Variable zum Plotten aus
pg1 <- ggplot(airbnb, aes(Rating_gesamt)) +
# Erstelle ein Histogramm mit Balkenbreite 1
geom_histogram(binwidth = 1) +
# Definiere die Achsenbeschriftungen
labs(x = "Gesamtrating",
y = "Häufigkeit") +
# Definiere den Range der x-Achse von 0 bis 100
coord_cartesian(xlim = c(0, 100)) +
# Wähle ein Design für den Plot
theme_light() +
# Vergrössere die Achsenbeschriftungen
theme(
axis.title = element_text(size = 16),
axis.text = element_text(size = 12)
)
## Erstelle das Streudiagramm für den Zusammenhang von Preis und
## Gesamtrating
# Wähle die Preis und Rating_gesamt Variablen zum Plotten aus und
# berechne den 10er Logarithmus von Preis
pg2 <- ggplot(airbnb, aes(x = log10(Preis), y = Rating_gesamt)) +
# Erstelle ein Streudiagramm, mit zu 25% transparenten Punkten
geom_point(alpha = .25) +
# Definiere die Achsenbeschriftungen mit Subskript für 10
labs(x = bquote("log"[10]*"(Preis)"),
y = "Gesamtrating") +
# Definiere den Range der y-Achse von 0 bis 100
coord_cartesian(ylim = c(0, 100)) +
# Wähle ein Design für den Plot
theme_light() +
# Vergrössere die Achsenbeschriftungen
theme(
axis.title = element_text(size = 16),
axis.text = element_text(size = 12)
)
## Plotte die Grafiken untereinander
pg1 / pg2
```
***
**Mittlere Gesamtratings**
```{r fig.width=3,fig.height=1.5, fig.align="center"}
# Berechne mittleres Gesamtrating und Runde auf eine Kommastelle
gesamtrating <- airbnb %>%
pull(Rating_gesamt) %>% mean(na.rm = TRUE) %>% round(1)
# Estelle den gauge mit dem gesamtrating Objekt
gauge(gesamtrating,
# Setze Minimu und Maximum Werte
min = 0, max = 100,
# Definiere Farbwerte mit gaugeSectors
gaugeSectors(
# Grün, wenn der Wert zwischen 80 und 100 liegt
success = c(80, 100),
# Orange, wenn der Wert zwischen 50 un 79 liegt
warning = c(50, 79),
# Rot, wenn der Wert zwischen 0 und 49 liegt
danger = c(0, 49)
))
```
Die Berliner Airbnbs scheinen allgemein in einem sehr guten Zustand zu sein. Zumindest lassen die hohen Gesamtratings darauf schliessen. Allerdings scheint es kaum einen Zusammenhang mit dem Preis zu geben, worüber sich Sparfüchse freuen dürften.
### Sauberkeit {data-commentary-width=300}
```{r}
# Erstelle das Histogramm der Sauberkeitsratings
ps1 <- ggplot(airbnb, aes(Rating_sauberkeit)) +
geom_histogram(binwidth = 1) +
labs(x = "Sauberkeitsrating",
y = "Häufigkeit") +
coord_cartesian(xlim = c(0, 10)) +
theme_light() +
theme(
axis.title = element_text(size = 16),
axis.text = element_text(size = 12)
)
# Erstelle das Streudiagramm für den Zusammenhang von Preis und
# Sauberkeitsrating
ps2 <- ggplot(airbnb, aes(x = log10(Preis), y = Rating_sauberkeit)) +
geom_point(alpha = .25) +
labs(x = bquote("log"[10]*"(Preis)"),
y = "Sauberkeitsrating") +
coord_cartesian(ylim = c(0, 10)) +
theme_light() +
theme(
axis.title = element_text(size = 16),
axis.text = element_text(size = 12)
)
# Plotte die Grafiken untereinander
ps1 / ps2
```
***
**Mittlere Sauberkeitsratings**
```{r fig.width=3,fig.height=1.5, fig.align="center"}
# erstelle einen gauge der mittleren Sauberkeitsratings
sauberkeit <- airbnb %>%
pull(Rating_sauberkeit) %>% mean(na.rm = TRUE) %>% round(1)
gauge(sauberkeit, min = 0, max = 10, gaugeSectors(
success = c(8, 10), warning = c(5, 7), danger = c(0, 4)
))
```
Auch beim Thema Sauberkeit gehen viele Hosts keine Kompromisse ein. Es scheint jedoch ein paar faule Eier zu geben. Immerhin, wer bereit ist über `r round(3**2.5 / 100) * 100` Euro pro Nacht auszugeben scheint auf der sicheren Seite zu sein.
### Lage {data-commentary-width=300}
```{r}
# Erstelle das Histogramm der Lageratings
pl1 <- ggplot(airbnb, aes(Rating_lage)) +
geom_histogram(binwidth = 1) +
labs(x = "Lagerating",
y = "Häufigkeit") +
coord_cartesian(xlim = c(0, 10)) +
theme_light() +
theme(
axis.title = element_text(size = 16),
axis.text = element_text(size = 12)
)
# Erstelle das Streudiagramm für den Zusammenhang von Preis und
# Lageratings
pl2 <- ggplot(airbnb, aes(x = log10(Preis), y = Rating_lage)) +
geom_point(alpha = .25) +
labs(x = bquote("log"[10]*"(Preis)"),
y = "Lagerating") +
coord_cartesian(ylim = c(0, 10)) +
theme_light() +
theme(
axis.title = element_text(size = 16),
axis.text = element_text(size = 12)
)
# Plotte die Grafiken untereinander
pl1 / pl2
```
***
**Mittlere Lageratings**
```{r fig.width=3,fig.height=1.5, fig.align="center"}
# erstelle einen gauge der mittleren Lageratings
lage <- airbnb %>%
pull(Rating_lage) %>% mean(na.rm = TRUE) %>% round(1)
gauge(lage, min = 0, max = 10, gaugeSectors(
success = c(8, 10), warning = c(5, 7), danger = c(0, 4)
))
```
Verrückt; auch die Lageratings sind fast alle super. Entweder Berlin hat fast nur erstklassige Wohngebiete, viele der guten Wohnungen sind bei Airbnb vermietet, oder die Gäste sind sehr wohlwollend. Wir wissen es schlussendlich nicht (eine einfache Erklärung für die guten ratings könnte z.B. auch sein, dass gute Airbnbs einfach häufiger besucht werden).